import org.junit.jupiter.api.Test;

import java.util.Random;

public class IntegerAlgorithm {
    @Test
    public void sameBitCount() {
        //两个Int 的相同位
        Random random = new Random();
        int a = random.nextInt();
        int b = random.nextInt();
        System.out.println(Integer.toBinaryString(a));
        System.out.println(Integer.toBinaryString(b));
        int c = a ^ b; //异或，不同的为1，同的为0
        int temp = 1;
        int result = 0;
        while (temp != 0) {
            if ((c & temp) != temp) {//temp那位是否为1
                result++;
            }
            temp <<= 1;
        }

        System.out.println(result);

        // return Integer.bitCount(x ^ y);
    }

    /**
     * 给定一个非负整数，你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
     * @param num
     * @return
     */
    public int maximumSwap(int num) {
        if(num <10) {
            return num;
        }
        String numStr = String.valueOf(num);
        final char[] chars = numStr.toCharArray();
        for (int i = 0; i < chars.length-1; i++) {//冒泡排序
            int maxIndex = i;
            for( int j = i +1;j<chars.length;j++) {
                if (chars[j] - chars[maxIndex] >= 0) {
                    maxIndex = j;
                }
            }
            if(chars[i] != chars[maxIndex]) {
                char temp = chars[maxIndex];
                chars[maxIndex] = chars[i];
                chars[i] = temp;
                break;
            }
        }

        String newNum = String.valueOf(chars);
        return Integer.parseInt(newNum);

    }
}
